"""
进程定义： 进程是操作系统进行资源分配和调度的一个独立单位。每个进程都有自己独立的内存空间、系统资源等。
        在 Python 中，可以通过 multiprocessing 模块来创建和管理进程。
    特点：
        1. 独立内存空间：每个进程都有自己独立的内存空间，这意味着它们之间的数据是隔离的。
        2. 多进程并行：多个进程可以同时运行，利用多核 CPU 进行并行计算。
        3. 资源隔离：每个进程都有自己的系统资源，如内存、文件句柄等，这有助于避免资源冲突和死锁。
线程定义： 线程是进程中的一个执行单元，是进程中的一个执行流。一个进程可以包含多个线程，这些线程共享进程的资源。
    特点：
        1. 共享内存空间：线程共享进程的内存空间，这意味着它们可以直接访问和共享数据。
        2. 轻量级：线程的创建和销毁开销较小，相比进程，线程更加高效。
        3. 并发执行：多个线程可以同时执行，利用 CPU 的时间片轮转机制进行并发执行。
        4. 线程间通信：线程之间可以通过共享内存进行通信，这使得线程间的数据共享更加方便。
进程、线程和协程都是实现并发执行的方式，但它们的粒度和调度机制不同。进程是操作系统调度的单位，线程是进程中的执行单元，协程是用户态的轻量级线程。
在 Python 中，进程和线程是由操作系统内核调度的，而协程是由程序自身通过事件循环调度的。
"""
# 进程
import multiprocessing

def fibonacci(n):
    """计算斐波那契数列的第 n 项"""
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

def worker(n):
    """进程工作函数"""
    result = fibonacci(n)
    print(f"Fibonacci({n}) = {result}")

if __name__ == "__main__":
    # 创建多个进程
    processes = []
    for i in range(10, 15):  # 计算 Fibonacci(10) 到 Fibonacci(14)
        p = multiprocessing.Process(target=worker, args=(i,))
        processes.append(p)
        p.start()

    # 等待所有进程完成
    for p in processes:
        p.join()

    print("所有进程已完成")

# 线程
import threading
import time

def download_file(file_name):
    """模拟下载文件"""
    print(f"开始下载 {file_name}...")
    time.sleep(2)  # 模拟下载时间
    print(f"{file_name} 下载完成")

if __name__ == "__main__":
    # 创建多个线程
    threads = []
    file_names = ["file1.txt", "file2.txt", "file3.txt"]
    for file_name in file_names:
        t = threading.Thread(target=download_file, args=(file_name,))
        threads.append(t)
        t.start()

    # 等待所有线程完成
    for t in threads:
        t.join()

    print("所有文件下载完成")